/**
* 使用文件存储的方式来保存数据，实现todo-list的功能
* 
* 学会使用文件存储数据的方式！
**/

var http = require('http');
var url = require('url');
var process = require('process');
var fs = require('fs');
var path = require('path');

var command = process.argv[2];  // 取命令行第一个参数
var file = path.join(process.cwd(), '/.tasks');
var itemInfo = process.argv.slice(3,process.argv.length).join(' ');

switch (command){  // 通过指定命令来实现功能
  case 'list':
    list(file);
    break;
  case 'add':
    add(file, itemInfo);
    break;
  case 'del':
    var delId = parseInt(process.argv[3],10);
    del(file, delId);
    break;
  default:
    console.log('Usage：' + process.argv[0] + ' list | add | del [item | delId]');
}

function initData(file,callback){
  fs.stat(file,function(err,stats){
    if(err){
      callback([]);
    }else{
      var tasks = [];
      fs.readFile(file, 'utf8',function(err,results){
        if (err){
          throw err;
        }
        var results = results.toString();
        var tasks = JSON.parse(results || '[]');
        callback(tasks);
      });
    }
  });
}

function storeData(file,tasks){
  fs.writeFile(file, JSON.stringify(tasks),'utf8',function(err){
    if (err){
      throw err;
    }else{
      console.log('Sucessed.');
    }
  });
}

function list(file){
  initData(file,function(tasks){
    for (var i=0 ; i < tasks.length ; i++){
      console.log(i + ') ' + tasks[i]);
    }
  });
}

function add(file,itemInfo){
  initData(file,function(tasks){
    tasks.push(itemInfo);
    storeData(file,tasks);
  });
}

function del(file,delId){
  // var length = 
  if(isNaN(delId)){
    console.log('Invalid delete number: ' + delId);
  }else{
    initData(file, function(tasks){
      tasks.splice(delId, 1);
      storeData(file,tasks);
    });
  }
}